Devices in a computer network interact in many ways. Internet services, remote access, e-mail, and distributed computing are all examples of services where devices use a network to interact. Many of these technologies are based on client-server architectures. That is, an environment where a client sends a request to a server for the server to perform some processing or provide information. However, these technologies suffer from difficulties with cross-platform compatibility.
For the client and server to interact they both need to speak the same language, yet different programming languages are often used to implement the client and the server leading to difficulties when attempting to communicate.
Additionally, for the client to send a request to a server, the client first needs to know the location of the server and services it provides. However, difficulties with discovering devices (e.g., servers) that are capable of handling requests also hinder client-server architectures.